﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CPTECH.Repository;
using System.Collections;
using CPTECH.Business;

namespace CPTECH.Presentation
{
    public partial class frm_alterarItem : frm_default
    {
        Int64 idSeqInUse = 0;
        string plaqueta = "";

        public frm_alterarItem()
        {
            InitializeComponent();
        }

        //volta para o form anterior.
        private void mnu_voltar_Click(object sender, EventArgs e)
        {
            if (mnu_voltar.Text == "Voltar")
            {
                this.closeForm();
            }
            else
            {
                clear();
                pn_dados.Enabled = false;
                bt_seguinte.Enabled = true;
                bt_anterior.Enabled = true;
                mnu_voltar.Text = "Voltar";
            }
        }

        //chama método que preenche na lbl_plaqueta o primeiro patrimônio que ainda não foi enviado
        private void frm_alterarItem_Load(object sender, EventArgs e)
        {
            findFirstPat();
            mnu_salvar.Enabled = false;
        }

        //método que busca o 1º patrimônio não enviado e printa no label, caso não exista nenhum dispara uma mensagem na tela.
        private void findFirstPat()
        {
            idSeqInUse = FisicoDB.getInstance().nextNoSended(0);
            plaqueta = FisicoDB.getInstance().returnNoSendPat(idSeqInUse);

            if (idSeqInUse != 0 && plaqueta != "")
            {
                lbl_plaqueta.Text = plaqueta;

                //habilita botão para navegação.
                bt_seguinte.Enabled = true;
                bt_anterior.Enabled = true;
                bt_alterar.Enabled = true;
            }
            else
            {
                MessageBox.Show("Nenhum item para ser alterado!", "Itens");
            }
        }

        //método que recebe os valores dos forms de seleção (filial, local, departamento, centroCusto e planta).
        public void sendedValues(string campo, string valor)
        {
            if (campo == "filial")
            {
                txt_filial.Text = valor;
            }

            else if (campo == "local")
            {
                txt_local.Text = valor;
            }

            else if (campo == "depto")
            {
                txt_depto.Text = valor;
            }

            else if (campo == "ccusto")
            {
                txt_cCusto.Text = valor;
            }

            else if (campo == "planta")
            {
                txt_planta.Text = valor;
            }
        }

        //segue para o proximo registro.
        private void bt_seguinte_Click(object sender, EventArgs e)
        {
            Int64 valor = idSeqInUse;

            idSeqInUse = FisicoDB.getInstance().nextNoSended(valor);

            if (idSeqInUse == 0 || idSeqInUse == null)
            {
                MessageBox.Show("Não existe registros após este!", "Proximo");
                idSeqInUse = valor;
            }
            else
            {
                string next = FisicoDB.getInstance().returnNoSendPat(idSeqInUse);
                lbl_plaqueta.Text = "";
                lbl_plaqueta.Text = next;
            }
        }

        //volta para o registro anterior
        private void bt_anterior_Click(object sender, EventArgs e)
        {
            Int64 valor = idSeqInUse;

            idSeqInUse = FisicoDB.getInstance().beforeNoSended(idSeqInUse);

            if (idSeqInUse == 0 || idSeqInUse == null)
            {
                MessageBox.Show("Não existe registros antes deste!", "Anterior");
                idSeqInUse = valor;
            }
            else
            {
                string next = FisicoDB.getInstance().returnNoSendPat(idSeqInUse);
                lbl_plaqueta.Text = "";
                lbl_plaqueta.Text = next;
            }
        }

        //preenche os campos com os valores do resgistro e habilita pra alteração.
        private void bt_alterar_Click(object sender, EventArgs e)
        {
            pn_dados.Visible = true;
            mnu_salvar.Enabled = true;
            bt_seguinte.Enabled = false;
            bt_anterior.Enabled = false;
            mnu_voltar.Text = "Cancelar";

            //chama método que preenche os campos.
            findValues();
        }

        //Busca todos os valores do patrimônio selecionado.
        private void findValues()
        {
            string plaqueta = lbl_plaqueta.Text;

            Fisico result = (Fisico)FisicoDB.getInstance().selectByPat(plaqueta)[0];
            txt_filial.Text = result.cdFisFilial;
            txt_local.Text = result.cdFisLocal;
            txt_depto.Text = result.cdFisDepto;
            txt_cCusto.Text = result.cdFisCcusto;
            txt_planta.Text = result.cdFisPlanta;
            txt_codItem.Text = result.cdDesc;
            txt_descItem.Text = result.dsItem;
            txt_marca.Text = result.marca;
            txt_modelo.Text = result.modelo;
            cbo_padrao.SelectedItem = result.padrao;
            txt_capacidade.Text = result.capacidade;
            txt_complemento.Text = result.complemento;
            txt_dtEstimada.Text = result.dtEstimada;
            txt_dtReal.Text = result.dtReal;
            txt_serial.Text = result.nrFabricacao;
            txt_livre1.Text = result.livre1;
            txt_livre2.Text = result.livre2;
            txt_livre3.Text = result.livre3;
            txt_livre4.Text = result.livre4;
            txt_partNumber.Text = result.partNumber;
            //txt_cdFisPatAnt.text = result.cdFisPatAntigo;
            cbo_situacao.SelectedItem = result.situacao;
            txt_tag.Text = result.tag;
            txt_fornecedor.Text = result.fornecedor;        
        }

        //limpa os campos.
        private void clear()
        {
            txt_filial.Text = "";
            txt_local.Text = "";
            txt_depto.Text = "";
            txt_cCusto.Text = "";
            txt_planta.Text = "";
            txt_codItem.Text = "";
            txt_descItem.Text = "";
            txt_marca.Text = "";
            txt_modelo.Text = "";
            cbo_padrao.SelectedItem = "";
            txt_capacidade.Text = "";
            txt_complemento.Text = "";
            txt_dtEstimada.Text = "";
            txt_dtReal.Text = "";
            txt_serial.Text = "";
            txt_livre1.Text = "";
            txt_livre2.Text = "";
            txt_livre3.Text = "";
            txt_livre4.Text = "";
            txt_partNumber.Text = "";
            //txt_cdFisPatAnt.text = "";
            cbo_situacao.SelectedItem = "";
            txt_tag.Text = "";
            txt_fornecedor.Text = "";

            pn_dados.Visible = false;
        }

        //chama método que efetua alteração no item.
        private void mnu_salvar_Click(object sender, EventArgs e)
        {
            updateSelectedPat();
            clear();
            bt_seguinte.Enabled = true;
            bt_anterior.Enabled = true;
            mnu_voltar.Text = "Voltar";
            mnu_salvar.Enabled = false;
        }

        //Método responsável por efetuar o update no banco.
        private void updateSelectedPat()
        {
            string plaqueta = (lbl_plaqueta.Text).Trim();
            string filial = txt_filial.Text;
            string local = txt_local.Text;
            string depto = txt_depto.Text;
            string ccusto = txt_cCusto.Text;
            string planta = txt_planta.Text;
            string cditem = txt_codItem.Text;
            string descitem = txt_descItem.Text;
            string modelo = txt_modelo.Text;
            string marca = txt_marca.Text;
            string padrao = cbo_padrao.SelectedItem.ToString();
            string dtestimada = txt_dtEstimada.Text;
            string dtreal = txt_dtReal.Text;
            string serial = txt_serial.Text;
            string complemento = txt_complemento.Text;
            string capacidade = txt_capacidade.Text;
            string partnumber = txt_partNumber.Text;
            string livre1 = txt_livre1.Text;
            string livre2 = txt_livre2.Text;
            string livre3 = txt_livre3.Text;
            string livre4 = txt_livre4.Text;
            string situacao = cbo_situacao.SelectedItem.ToString();
            string tag = txt_tag.Text;
            string fornecedor = txt_fornecedor.Text;
            string patAntigo = "";

            string data = DateTime.Now.ToString("dd/MM/yyyy hh:mm");
            string user = FisicoBO.getInstance().idPalm;
            string os = FisicoBO.getInstance().os;

            string status = "3";
            string enviado = "0";

            if (FisicoDB.getInstance().updateByCodPat(plaqueta, filial, depto, ccusto, local, planta, cditem, descitem, marca, modelo, padrao, dtestimada,
                dtreal, complemento, serial, capacidade, partnumber, livre1, livre2, livre3, livre4, situacao, tag, fornecedor, data, user, os, patAntigo, status,
                enviado))
            {
                MessageBox.Show("Item alterado com sucesso!", "Item Alterado");
                RegisterBO.getInstance().registerUpdate(plaqueta);
            }
            else
            {
                MessageBox.Show("Erro ao tentar alterar o registro!, entrar em contato com o suporte!","Erro");
            }

        }

        //chama  o form de seleção de filial.
        private void bt_selectFilial_Click(object sender, EventArgs e)
        {
            frm_filial filial = new frm_filial(this, null, 2);//cria instancia.
            filial.showForm(this);//chama o form instanciado.
        }

        //chama o form de local.
        private void bt_selectLocal_Click(object sender, EventArgs e)
        {
            frm_local local = new frm_local(this, null, 2);//cria instancia do novo form.
            local.showForm(this);
        }

        //chama o form de departamento.
        private void bt_selectDepto_Click(object sender, EventArgs e)
        {
            frm_departamento depto = new frm_departamento(this, null, 2);
            depto.showForm(this);
        }

        //chama o form de centro de custo.
        private void bt_selectCcusto_Click(object sender, EventArgs e)
        {
            frm_cCusto cCusto = new frm_cCusto(this, null, 2);
            cCusto.showForm(this);
        }

        //chama o frm planta.
        private void bt_selectPlanta_Click(object sender, EventArgs e)
        {
            frm_planta planta = new frm_planta(this, null, 2);
            planta.showForm(this);
        }

        //chama método quq verifica se o cod. Item informado existe.
        private void bt_pesquisar_Click(object sender, EventArgs e)
        {
            if (txt_codItem.Text == "")
            {
                MessageBox.Show("Insira um código para continuar!", "Item");
                txt_codItem.Focus();
            }
            else
            {
                txt_codItem.Text = txt_codItem.Text.ToUpper().Trim();
                string codItem = txt_codItem.Text;
                try
                {
                    CodPad result = (CodPad)CodPadDB.getInstance().selectByCodPad(codItem)[0];

                    if (result == null)
                    {
                        txt_descItem.Text = "NÃO POSSUI";
                        txt_marca.Text = "NÃO POSSUI";
                        txt_modelo.Text = "NÃO POSSUI";
                    }
                    else
                    {
                        txt_descItem.Text = result.DS_PAD.ToString();
                        txt_marca.Text = result.MARCA.ToString();
                        txt_modelo.Text = result.MODELO.ToString();
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Código de item não encontrado na base, verifique!", "Item não encontrado.");
                    txt_codItem.Focus();
                }
            }
        }

        //habilita somente números no campo.
        private void txt_dtEstimada_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
                MessageBox.Show("Somente números são permitidos neste campo!", "Aviso");
                txt_dtEstimada.Text = "";
                txt_dtEstimada.Focus();
            }
        }

        //habilita somente números no campo.
        private void txt_dtReal_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
                MessageBox.Show("Somente números são permitidos neste campo!", "Aviso");
                txt_dtReal.Text = "";
                txt_dtReal.Focus();
            }
        }
    }
}